var _ = require("lodash");

// _.flatMap(collection, [iteratee=_.identity])
// 用于将一个嵌套的数组“压平”到一个单层数组中，并对每个元素执行一个提供的函数
// 如果这个方法提供了后面的迭代函数，会对所有的数据先执行迭代函数，然后再压缩到一个数组
// 如果没有提供迭代函数，则会直接进行压缩，但是只会压缩一层
// 示例1：压平一个嵌套的数组
const nestedArray = [1, [2, 3], [4, [5, 6]]];
const flattenedArray = _.flatMap(nestedArray);
console.log(flattenedArray);
// 输出: [1, 2, 3, 4, [5, 6]]

// 示例2：在压平的同时应用一个函数
const numbers = [1, 2, 3];
const doubledAndFlattened = _.flatMap(numbers, (n) => n * n);
console.log(doubledAndFlattened);
// 输出: [1, 4, 9]

// 示例3：处理对象数组，提取属性值
const people = [
  { name: "Alice", ages: [25, 30] },
  { name: "Bob", ages: [20] },
];
const allAges = _.flatMap(people, "ages");
console.log(allAges);
// 输出: [25, 30, 20]

// _.flatMapDeep(collection, [iteratee=_.identity])
// 可以解决扁平化只有一层的问题，可以进行无限扁平，
// 后面也可以执行一个迭代的函数
const flattenedArray2 = _.flatMapDeep(nestedArray);
console.log(flattenedArray2);

function duplicate(n) {
  return [[[n, n]]];
}

let a = _.flatMapDeep([1, 2], duplicate);
console.log(a);

// _.flatMapDepth(collection, [iteratee=_.identity], [depth=1])
// 这个方法和上一个基本没太大区别，他可以指定扁平化的递归程度
